"""
* page就是网页的页面层，object就是封装的LoginPage 类:每一个页面一个类，包含业务逻辑和测试对象
    * 页面元素元素定位: 定义为类的属性
    * 页面的操作行为 ： 定义为类的实例方法
"""
import time

from loguru import logger
from selenium.webdriver.common.by import By
from common.base_page import BasePage


class LoginPage(BasePage):
    # 用户名输入框
    loc_username = (By.XPATH, '//input[@placeholder="请输入手机号/用户名"]')
    # 密码输入框
    loc_password = (By.XPATH, '//input[@placeholder="请输入密码"]')
    # 登录按钮
    loc_login_but = (By.CLASS_NAME, 'login-buttonx')
    # 用户输入框错误提示
    # username_error_tips = (By.XPATH,'//div[text()="账号为4~16位字母、数字或下划线"]')
    # 密码输入框错误提示
    # password_error_tips = (By.XPATH,'//div[text()="请输入密码"]')
    # 账号密码错误的提示
    account_error = (By.XPATH,'//p[@class="el-message__content"]')  # 不能直接用之前方法进行断言


    # 登录操作 --行为 实例方法 --参数化
    def login(self,uname,pwd):
        logger.info(f"-----------进行登录操作---------")
        # 1、输入账号
        # self.wait_element_visible(self.loc_username).send_keys(uname)
        self.input_text(self.loc_username,uname) # 调用关键字优化
        # 2、输入密码
        # self.wait_element_visible(self.loc_password).send_keys(pwd)
        self.input_text(self.loc_password,pwd)# 调用关键字优化
        # 3、点击登录按钮
        # self.wait_element_clickable(self.loc_login_but).click()
        self.click_element(self.loc_login_but)
        time.sleep(1)

    # 封装一个统一做错误提示断言的方法 ： 方法一个，不同的数据测试
    def is_error_tips_dispaly(self,tips_text):
        error_tips = (By.XPATH, f'//div[text()="{tips_text}"]')  # 提示信息的文本参数化
        # 只要错误提示存在 就可以了  -结果返回 True False
        return self.elememnt_display(error_tips)

    # 获取账号信息错误的提示 单独做
    def get_account_error(self):
        return  self.get_text(self.account_error)